﻿using System;
using System.Collections;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Web;
using System.Web.SessionState;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.HtmlControls;

using BEGDC.Utility.Castle;
using BEGDC.Utility.ExceptionManagement;
using BEGDC.CC.BL.Common.Query;
using BEGDC.CC.BL.Workflow;
using BEGDC.CC.BL.UserManagement;
using BEGDC.CC.BL.Common;
using BEGDC.CC.Entity;
using BEGDC.CC.Web.UserControls;
using NetBpm.Util.Client;
using NetBpm.Workflow.Execution;
using NetBpm.Workflow.Execution.EComp;
using ASBCC.Business;
namespace BEGDC.CC.Web.View
{
    /// <summary>
    /// Summary description for AllAPList.
    /// </summary>
    public class AllAPList : System.Web.UI.Page
    {
        private string CloseRate
        {
            get
            {
                return ViewState["CloseRate"].ToString();
            }
            set
            {
                ViewState["CloseRate"] = value;
            }
        }
        /// <summary>
        /// 
        /// </summary>
        private bool _IsSearch
        {
            get
            {
                if (ViewState["_IsSearch"] == null) return false;

                return Convert.ToBoolean(ViewState["_IsSearch"]);
            }
            set { ViewState["_IsSearch"] = value; }
        }

        /// <summary>
        /// 
        /// </summary>
        private string _Sorting
        {
            get
            {
                if (ViewState["Sorting"] == null) return string.Empty;

                return ViewState["Sorting"].ToString();
            }
            set { ViewState["Sorting"] = value; }
        }

        protected System.Web.UI.WebControls.TextBox txtEndDate;
        protected System.Web.UI.WebControls.TextBox txtStartDate;
        protected System.Web.UI.HtmlControls.HtmlImage StartDateImg;
        protected System.Web.UI.HtmlControls.HtmlImage EndlDateImg;

        protected System.Web.UI.WebControls.Button btnSearch;
        protected System.Web.UI.WebControls.Button btnExportPercentage;
        protected System.Web.UI.WebControls.Button btnExport;

        protected System.Web.UI.WebControls.DataGrid dgTaskList;
        protected System.Web.UI.WebControls.Label lblRecordCount;
        protected System.Web.UI.WebControls.Label lblCurrentPageIndex;
        protected System.Web.UI.WebControls.Label lblPageCount;
        protected System.Web.UI.WebControls.ImageButton btnPageFirst;
        protected System.Web.UI.WebControls.ImageButton btnPagePrev;
        protected System.Web.UI.WebControls.ImageButton btnPageNext;
        protected System.Web.UI.WebControls.ImageButton btnPageLast;
        protected System.Web.UI.WebControls.TextBox txtPage;
        protected System.Web.UI.WebControls.Label lblFinishedRate;

        protected System.Web.UI.WebControls.DataGrid dgAPRate;
        protected System.Web.UI.WebControls.ImageButton btnGotoPage;

        private void Page_Load(object sender, System.EventArgs e)
        {
            if (!Page.IsPostBack)
            {
                this.BindData(1);
            }
        }

        private void BindData(int pageIndex)
        {

            IQuery iquery = AppContainer.Instance[ServiceConst.QueryService] as IQuery;

            System.Data.DataTable dtAPs = null;


            dtAPs = iquery.QueryAPList();

            if (this._IsSearch)
            {
                string filter = string.Empty;

                if (txtStartDate.Text != string.Empty)
                {
                    if (filter != string.Empty)
                        filter += " and ";
                    filter += " DueTime >= '" + this.txtStartDate.Text + "'";
                }

                if (this.txtEndDate.Text != string.Empty)
                {
                    if (filter != string.Empty)
                        filter += " and ";
                    filter += " DueTime <= '" + this.txtEndDate.Text + "'";
                }

                dtAPs.DefaultView.RowFilter = filter;
            }

            if (this._Sorting != string.Empty)
            {
                dtAPs.DefaultView.Sort = this._Sorting;
            }

            int count = dtAPs.DefaultView.Count;

            int countAll = dtAPs.Rows.Count;

            DataRow[] closeAPs = dtAPs.Select("APStep = 'end'");
            if (closeAPs != null)
            {
                if (countAll != 0)
                {
                    this.CloseRate = Convert.ToString(Math.Round(((double)closeAPs.Length / (double)countAll) * 100, 2));
                    //					double rate = 0;
                    //					if( CloseRate.Length > 6 )
                    //					{
                    //						rate = Convert.ToDouble( CloseRate.Substring(0,5) ) * 100;
                    //					}
                    //					else
                    //					{
                    //						rate = Convert.ToDouble( CloseRate ) * 100;
                    //					}
                    this.lblFinishedRate.Text = CloseRate + "%";
                }
            }

            this.dgTaskList.DataSource = dtAPs.DefaultView;
            this.dgTaskList.DataBind();

            SetPageCount(count, pageIndex);

            System.Data.DataTable dtAPRate = iquery.QueryAPRate();
            txtStartDate.Text = PageSafeHelper.SafeText(txtStartDate.Text);
            txtEndDate.Text = PageSafeHelper.SafeText(txtEndDate.Text);
            string filter_rate = string.Empty;
            if (this._IsSearch)
            {
                if (txtStartDate.Text != string.Empty)
                {
                    filter_rate += " APMonth >= '" + Convert.ToDateTime(this.txtStartDate.Text).ToString("yyyy-MM") + "'";
                }

                if (this.txtEndDate.Text != string.Empty)
                {
                    if (filter_rate != string.Empty)
                        filter_rate += " and ";
                    filter_rate += " APMonth <= '" + Convert.ToDateTime(this.txtEndDate.Text).ToString("yyyy-MM") + "'";
                }
            }
            dtAPRate.DefaultView.RowFilter = filter_rate;
            this.dgAPRate.DataSource = dtAPRate.DefaultView;
            this.dgAPRate.DataBind();
        }

        #region Web Form Designer generated code
        override protected void OnInit(EventArgs e)
        {
            //
            // CODEGEN: This call is required by the ASP.NET Web Form Designer.
            //
            InitializeComponent();
            base.OnInit(e);
        }

        /// <summary>
        /// Required method for Designer support - do not modify
        /// the contents of this method with the code editor.
        /// </summary>
        private void InitializeComponent()
        {
            this.btnExport.Click += new EventHandler(btnExport_Click);
            this.btnSearch.Click += new EventHandler(btnSearch_Click);
            this.btnExportPercentage.Click += new EventHandler(btnExportPercentage_Click);
            this.dgTaskList.SortCommand += new System.Web.UI.WebControls.DataGridSortCommandEventHandler(this.dgTaskList_SortCommand);
            this.btnPageFirst.Click += new System.Web.UI.ImageClickEventHandler(this.btnPageFirst_Click);
            this.btnPagePrev.Click += new System.Web.UI.ImageClickEventHandler(this.btnPagePrev_Click);
            this.btnPageNext.Click += new System.Web.UI.ImageClickEventHandler(this.btnPageNext_Click);
            this.btnPageLast.Click += new System.Web.UI.ImageClickEventHandler(this.btnPageLast_Click);
            this.btnGotoPage.Click += new System.Web.UI.ImageClickEventHandler(this.btnGotoPage_Click);

            this.Load += new System.EventHandler(this.Page_Load);

        }
        #endregion

        #region ---------- paging events ----------------
        private void btnPageFirst_Click(object sender, System.Web.UI.ImageClickEventArgs e)
        {
            this.dgTaskList.CurrentPageIndex = 0;
            this.BindData(1);
        }

        private void btnPagePrev_Click(object sender, System.Web.UI.ImageClickEventArgs e)
        {
            if (_CurrentPageIndex == 1) return;
            this.dgTaskList.CurrentPageIndex = _CurrentPageIndex - 2;
            this.BindData(_CurrentPageIndex - 1);
        }

        private void btnPageNext_Click(object sender, System.Web.UI.ImageClickEventArgs e)
        {
            if (_CurrentPageIndex == _PageCount) return;
            this.dgTaskList.CurrentPageIndex = _CurrentPageIndex;
            this.BindData(_CurrentPageIndex + 1);
        }

        private void btnPageLast_Click(object sender, System.Web.UI.ImageClickEventArgs e)
        {
            this.dgTaskList.CurrentPageIndex = _PageCount - 1;
            this.BindData(_PageCount);
        }

        private void btnGotoPage_Click(object sender, System.Web.UI.ImageClickEventArgs e)
        {
            if (this.txtPage.Text == string.Empty)
            {
                this.txtPage.Text = "1";
            }
            int gotopage = 1;
            try
            {
                gotopage = Convert.ToInt32(this.txtPage.Text);
            }
            catch { }
            int currentpage = 0;

            if (gotopage >= _PageCount)
            {
                gotopage = _PageCount;
                currentpage = gotopage - 1;
                if (currentpage < 0) currentpage = 0;
            }
            else if (gotopage <= 0)
            {
                gotopage = 1;
            }
            else
            {
                currentpage = gotopage - 1;
            }

            this.dgTaskList.CurrentPageIndex = currentpage;

            this.BindData(gotopage);

            this.txtPage.Text = string.Empty;
        }

        #endregion

        #region page navigation
        private int _PageCount
        {
            get
            {
                if (ViewState["PageCount"] != null) return (int)ViewState["PageCount"];
                else
                    return 0;
            }
            set
            {
                ViewState["PageCount"] = value;
            }
        }
        private int _CurrentPageIndex
        {
            get
            {
                if (ViewState["CurrentPageIndex"] != null) return (int)ViewState["CurrentPageIndex"];
                else
                    return 0;
            }
            set
            {
                ViewState["CurrentPageIndex"] = value;
            }
        }
        private int _RowCount
        {
            get
            {
                if (ViewState["RowCount"] != null) return (int)ViewState["RowCount"];
                else
                    return 0;
            }
            set
            {
                ViewState["RowCount"] = value;
            }
        }
        private void SetPageNavi(int newPage)
        {
            if (newPage <= 1)
            {
                this.btnPageFirst.ImageUrl = BEGDC.CC.Web.UserControls.WebUtility.Path + "/images/pg_first_inact.gif";
                this.btnPagePrev.ImageUrl = BEGDC.CC.Web.UserControls.WebUtility.Path + "/images/pg_pre_inact.gif";
                this.btnPageFirst.Attributes["disabled"] = "true";
                this.btnPagePrev.Attributes["disabled"] = "true";
            }
            else
            {
                this.btnPageFirst.ImageUrl = BEGDC.CC.Web.UserControls.WebUtility.Path + "/images/pg_first.gif";
                this.btnPagePrev.ImageUrl = BEGDC.CC.Web.UserControls.WebUtility.Path + "/images/pg_pre.gif";
                this.btnPageFirst.Attributes.Remove("disabled");
                this.btnPagePrev.Attributes.Remove("disabled");
            }

            if (newPage >= _PageCount)
            {
                this.btnPageNext.ImageUrl = BEGDC.CC.Web.UserControls.WebUtility.Path + "/images/pg_next_inact.gif";
                this.btnPageLast.ImageUrl = BEGDC.CC.Web.UserControls.WebUtility.Path + "/images/pg_last_inact.gif";
                this.btnPageNext.Attributes["disabled"] = "true";
                this.btnPageLast.Attributes["disabled"] = "true";
            }
            else
            {
                this.btnPageNext.ImageUrl = BEGDC.CC.Web.UserControls.WebUtility.Path + "/images/pg_next.gif";
                this.btnPageLast.ImageUrl = BEGDC.CC.Web.UserControls.WebUtility.Path + "/images/pg_last.gif";
                this.btnPageNext.Attributes.Remove("disabled");
                this.btnPageLast.Attributes.Remove("disabled");
            }

            this.lblCurrentPageIndex.Text = newPage.ToString();
            this.lblPageCount.Text = _PageCount.ToString();
            this.lblRecordCount.Text = _RowCount.ToString();

        }

        private void SetPageCount(int count, int pageIndex)
        {
            if (count > 0)
            {
                _RowCount = count;
                _PageCount = count / this.dgTaskList.PageSize;
                if (count % this.dgTaskList.PageSize > 0) _PageCount++;

                _CurrentPageIndex = pageIndex;
                SetPageNavi(pageIndex);
            }
            else
            {
                _RowCount = count;
                _PageCount = count;
                _CurrentPageIndex = 0;
                SetPageNavi(0);
            }
        }

        #endregion



        void btnExportPercentage_Click(object sender, EventArgs e)
        {
            BEGDC.CC.Web.Control.ExportDataGridToExcel.Export(this.Page, this.dgAPRate, "APRate.xls", "Finished rate: " + this.CloseRate);
        }

        void btnSearch_Click(object sender, EventArgs e)
        {
            this.dgTaskList.CurrentPageIndex = 0;

            if (this.txtStartDate.Text == string.Empty && this.txtEndDate.Text == string.Empty)
            {
                this._IsSearch = false;
                this.BindData(1);
                return;
            }
            this._IsSearch = true;

            this.BindData(1);
        }

        void btnExport_Click(object sender, EventArgs e)
        {
            this.dgTaskList.AllowPaging = false;
            this.BindData(1);
            BEGDC.CC.Web.Control.ExportDataGridToExcel.Export(this.Page, this.dgTaskList, "APList.xls", "Finished rate: " + this.CloseRate);
        }

        //		private void btnSearch_Click(object sender, System.Web.UI.ImageClickEventArgs e)
        //		{
        //			if (this.txtAPNo.Text.Trim() == string.Empty)
        //			{
        //				this._IsSearch = false;
        //				this.BindData(1);
        //				return;
        //			}
        //			this._IsSearch = true;
        //
        //			this.BindData(1);
        //		}

        public void dgTaskList_SortCommand(object source, DataGridSortCommandEventArgs e)
        {
            if (this._Sorting.IndexOf(e.SortExpression) > -1 && this._Sorting == e.SortExpression)
                this._Sorting = e.SortExpression + " desc";
            else
                this._Sorting = e.SortExpression;
            this.BindData(1);

        }
    }
}
